home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / amber / amber.lha / Node.h < prev    next >
C/C++ Source or Header  |  1991-04-25  |  2KB  |  71 lines

  1. #ifndef _node_h
  2. #define _node_h
  3. //
  4. // There is one Node object per node.  Application-visible node
  5. // primitives (as commented below) are remotely invokable and are
  6. // hacked to avoid actual remote invocations whenever possible.
  7. // Node objects are not customizable.
  8. //
  9.  
  10. #include "Defs.h"
  11. #include "NamedObject.h"
  12.  
  13. class Node : public NamedObject {
  14.     int nodeid;            // our node number
  15.     int nodecount;            // how many active nodes
  16.     int numprocessors;
  17.     int preemptQuantum;
  18.     int shutdownFlag;
  19.     int shutdownStatus;
  20.     char hostname[HostLen];
  21. public:
  22.     //
  23.     // These primitives are private to the kernel.
  24.     //
  25.     Node(int nodeId, int activeNodes, int cpus);
  26.     Node(int nodeId);
  27.     ~Node();
  28.     int Init();
  29.     int Start(int quantum);
  30.     void Die(int propagate = 0);
  31.         void Run();
  32.     int AwaitShutdownRequest();
  33.     void Shutdown(int status);
  34. //    Objany RunThread(PFany pf, ...);
  35.  
  36.     //
  37.     // These primitives may be used by the application.
  38.     //
  39.     void Halt(int status = 0);
  40.     void Abort();
  41.     void AbortWithoutCore(int status);
  42.     int NodeNum();
  43.     int NodeCount();
  44.     int Processors();
  45.     int Quantum();
  46.     Node *GetNodeRef(int nodeId);
  47.     Node *NextNode(Node *curNode = 0);
  48.     char *Hostname()        // won't work remotely XXX
  49.          { return hostname; }
  50.     int Spin(int spincount);    // useful for testing
  51.     int Visit();
  52. };
  53.  
  54. extern Node *thisnode;
  55.  
  56. //
  57. // AmberState should probably be part of the node object, and needs a few
  58. // more state values.
  59. //
  60. enum NodeState { StaticCtor, ProgramInit, RemoteStartup, LocalStartup,
  61.          RunningMain, ShuttingDown, StaticDtor };
  62. extern NodeState AmberState;
  63.  
  64. //
  65. // For use by the application.
  66. //
  67. #define MULTITHREADED()        (AmberState == RunningMain)
  68. #define SINGLETHREADED()    (!MULTITHREADED())
  69.  
  70. #endif _node_h
  71.